package cool.tsy.emos.wx.db.dao;

import cool.tsy.emos.wx.db.pojo.TbUser;
import org.apache.ibatis.annotations.Mapper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author WangHongxuan
 * @since 2021-09-24
 */
@Mapper
public interface TbUserDao {

    /**
     * <h2>判断是否已经拥有超级管理员</h2>
     */
    boolean haveRootUser();

    /**
     * <h2>保存用户信息</h2>
     */
    int insert(HashMap<String, Object> param);

    /**
     * <h2>查询用户 Id<h2/>
     */
    Integer searchIdByOpenId(String openId);

    /**
     * <h2>查询用户的权限列表</h2>
     */
    Set<String> searchUserPermissions(int userId);

    /**
     * <h2>查询用户信息</h2>
     */
    TbUser searchById(int userId);

    /**
     * <h2>查询员工的姓名和部门名称</h2>
     */
    HashMap searchNameAndDept(int userId);

    /**
     * <h2>查询员工的入职日期</h2>
     */
    String searchUserHiredate(int userId);

    /**
     * <h2>查询用户摘要信息<h2/>
     */
    HashMap searchUserSummary(int userId);

    /**
     * <h2>模糊根据部门分组的成员</h2>
     */
    ArrayList<HashMap> searchUserGroupByDept(String keyword);

    /**
     * <h2>查询成员信息（会议添加成员）</h2>
     */
    ArrayList<HashMap> searchMembers(List param);

    /**
     * <h2>查询用户概要信息</h2>
     */
    HashMap searchUserInfo(int userId);

    /**
     * <h2>查询部门经理</h2>
     */
    int searchDeptManagerId(int id);

    /**
     * <h2>查询总经理</h2>
     */
    int searchGmId();

    /**
     * <h2>根据用户ID查询用户信息</h2>
     */
    List<HashMap> selectUserPhotoAndName(List param);

    /**
     * <h2>查找用户Email</h2>
     */
    String searchMemberEmail(int id);

    /**
     * <h2>根据id查询某部门当前成员数量</h2>
     */
    long searchUserCountInDept(int deptId);

    /**
     * <h2>根据Email查询用户ID</h2>
     */
    int searchUserIdByEmail(String email);

    /**
     * <h2>激活普通用户账号</h2>
     */
    int activeUserAccount(HashMap param);

    /**
     * <h2>更新用户信息</h2>
     */
    int updateUserInfo(HashMap param);

    /**
     * <h2>删除用户</h2>
     */
    int deleteUserById(int id);

    /**
     * <h2>查询用户通讯录信息</h2>
     */
    ArrayList<HashMap> searchUserContactList();
}
